package cliente.jogocliente.iu;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.LineBorder;

import cliente.jogocliente.rn.RNSalaJogo;
import cliente.jogocliente.so.SOJogoClienteSaida;

public class IUSalaJogoPanelDireita extends JPanel {
	private static final long serialVersionUID = 2897266676114320599L;
	
	private JTextArea txtMensagemDoJogador;
	private JTextArea txtMensagemDosJogadores;
	
	private JButton btnDesistir;
	
	private ActionListener actionListenerDesistir;
	
	private SOJogoClienteSaida jogoClienteSaida;

	/**
	 * Create the panel.
	 */

	RNSalaJogo salaJogo;

	public IUSalaJogoPanelDireita(RNSalaJogo salaJogo, SOJogoClienteSaida clienteSaida) {
		this.setJogoClienteSaida(clienteSaida);
		
		this.salaJogo = salaJogo;
		setBorder(new LineBorder(new Color(0, 0, 0)));
		setSize(new Dimension(200, 600));
		setLayout(new GridLayout(3, 0, 0, 0));

		JPanel panel_1 = new JPanel();
		add(panel_1);
		panel_1.setLayout(null);

		setTxtMensagemDosJogadores(new JTextArea());
		getTxtMensagemDosJogadores().setLineWrap(true);
		getTxtMensagemDosJogadores().setText("  Mensagem dos Jogadores");
		getTxtMensagemDosJogadores().setBounds(20, 42, 158, 147);
		panel_1.add(getTxtMensagemDosJogadores());
		getTxtMensagemDosJogadores().setColumns(10);
		getTxtMensagemDosJogadores().setEditable(false);
		getTxtMensagemDosJogadores().setWrapStyleWord(true);

		JPanel panel = new JPanel();
		add(panel);
		panel.setLayout(null);

		setTxtMensagemDoJogador(new JTextArea());
		getTxtMensagemDoJogador().setText("      Mensagem do Jogador");
		getTxtMensagemDoJogador().setBounds(20, 31, 158, 158);
		panel.add(getTxtMensagemDoJogador());
		getTxtMensagemDoJogador().setColumns(10);
		getTxtMensagemDoJogador().setEditable(false);
		getTxtMensagemDoJogador().setWrapStyleWord(true);

		JPanel panel_2 = new JPanel();
		add(panel_2);
		panel_2.setLayout(null);

		setBtnDesistir(new JButton("Desistir"));
		getBtnDesistir().setBounds(99, 135, 89, 23);
		panel_2.add(getBtnDesistir());

		setActionListenerDesistir(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				btnDesistirActionPerformed();
			}
		});
		
		getBtnDesistir().addActionListener(getActionListenerDesistir());
	}

	public JTextArea getTxtMensagemDosJogadores() {
		return txtMensagemDosJogadores;
	}

	public void btnDesistirActionPerformed() {
		// avisar aos demais jogadores que saiu		
		try {
			salaJogo.desistirJogo(salaJogo.getIdSalaJogo());
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	public void finalizarSalaJogo() {
		getJogoClienteSaida().finalizarSalaJogo();
	}
	
	public JTextArea getTxtMensagemDoJogador() {
		return txtMensagemDoJogador;
	}
	
	public void informarFimPartida() {
		getBtnDesistir().setLabel("Fechar");
		getBtnDesistir().removeActionListener(getActionListenerDesistir());
		getBtnDesistir().addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				finalizarSalaJogo();
			}
		});
	}

	protected void setTxtMensagemDoJogador(JTextArea txtMensagemDoJogador) {
		this.txtMensagemDoJogador = txtMensagemDoJogador;
	}

	protected void setTxtMensagemDosJogadores(JTextArea txtMensagemDosJogadores) {
		this.txtMensagemDosJogadores = txtMensagemDosJogadores;
	}

	protected JButton getBtnDesistir() {
		return btnDesistir;
	}

	protected void setBtnDesistir(JButton btnDesistir) {
		this.btnDesistir = btnDesistir;
	}

	protected ActionListener getActionListenerDesistir() {
		return actionListenerDesistir;
	}

	protected void setActionListenerDesistir(ActionListener actionListenerDesistir) {
		this.actionListenerDesistir = actionListenerDesistir;
	}

	protected SOJogoClienteSaida getJogoClienteSaida() {
		return jogoClienteSaida;
	}

	protected void setJogoClienteSaida(SOJogoClienteSaida jogoClienteSaida) {
		this.jogoClienteSaida = jogoClienteSaida;
	}
}
